/*
 * @Author: 梁卓
 * @Date: 2022-02-01 23:13:52
 * @LastEditTime: 2022-02-15 21:38:04
 * @LastEditors: Please set LastEditors
 * @Description: 自定义vue指令
 * @FilePath: \dreamUi\src\utils\permission.js
 */
import Vue from 'vue';
import store from '@/store/index';

/** 
 * directive 自定义指令
 *
*/
Vue.directive('hasRole', {
  inserted(el, binding) {
    // 获取指令传递过来的数据
    const { value } = binding;
    // 获取vuex中的角色
    const roles = store.state.roles;
    // 定义超级管理员权限
    const admin = 'SUPER_ADMIN';
    if(value && value instanceof Array && value.length > 0) {
      /**
       * some() 用于检查数组中元素是否符合条件
       */
      const hasRole = roles.some(item => {
          return item.code === admin || value.includes(item.code);
      });
      if (!hasRole) {
        // 把对应的元素删除
        el.parentNode.removeChild(el);
      }
    } else {
      throw new Error(`请设置${value}角色标签`)
    }
  }
});

/*
  * 自定义权限指令
*/
Vue.directive('hasPermission', {
  inserted(el, binding) {
    const { value } = binding;
    // 获取权限数据
    const permissions = store.state.permissions;
    // 再次获取用户角色信息
    const roles = store.state.roles;
    const admin = 'SUPER_ADMIN';
    if (value && value instanceof Array && value.length > 0) {
      const hasPermi = permissions.some(item => {
        return value.includes(item.code);
      });
      const hasRole = roles.some(item => {
        return item.code === admin;
      });
      if (!hasRole && ! hasPermi) {
        el.parentNode.removeChild(el);
      }
    } else {
      throw new Error(`请设置${value}对应的权限标签`);
    }
  }
});